package com.flyme.module.file.provider.service.impl;


import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.flyme.common.core.constants.CommonConstants;
import com.flyme.common.core.model.ResultBody;
import com.flyme.common.core.utils.ObjectUtils;
import com.flyme.common.core.utils.StringUtils;
import com.flyme.core.base.supper.service.impl.BaseServiceImpl;
import com.flyme.module.file.client.entity.SysCourseType;
import com.flyme.module.file.provider.mapper.SysCourseTypeMapper;
import com.flyme.module.file.provider.service.SysCourseTypeService;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;

/**
 * @author: flyme
 * @date: 2018/3/7 15:27
 * @desc: 课程管理接口实现
 */
@Service
public class SysCourseTypeServiceImpl extends BaseServiceImpl<SysCourseTypeMapper, SysCourseType> implements SysCourseTypeService {

    @Override
    public Boolean addCourseType(SysCourseType courseType) {
        String parentId = courseType.getParentId();
        courseType.setStatus(CommonConstants.ENABLED);
        courseType.setParentId(StringUtils.isBlank(parentId) ? "0" : parentId);
        courseType.setSortOrder(ObjectUtils.isEmpty(courseType.getSortOrder()) ? 0 : courseType.getSortOrder());
        courseType.setIsParent(0);
        if (!parentId.equals("0")) {
            SysCourseType parent = getById(parentId);
            parent.setIsParent(1);
            //更新父节点
            saveOrUpdate(parent);
        }
        return save(courseType);
    }


    @Override
    public Boolean updateCourseType(SysCourseType courseType) {
        return saveOrUpdate(courseType);
    }
    @Override
    public ResultBody delById(Long courseTypeId) {
        SysCourseType courseType=getById(courseTypeId);
        String parentId=courseType.getParentId();
        if(courseType.getIsParent().equals(1)){
            int n=count(q().eq("parentId",courseTypeId));
            if(n>0){
                return ResultBody.failed("请先删除子分类");
            }
        }else{
            int n=count(q().eq("parentId",parentId));
            if(n==1){
                UpdateWrapper u=new UpdateWrapper();
                update(u.set(true,"isParent",0).eq(true,"id",parentId));
            }
        }
        removeById(courseTypeId);
        return ResultBody.success("刪除成功");
    }
    /**
     * 查询某级分类下的所有下级分类
     */
    public List<SysCourseType> selectByParentId(Long parentId){
        return list(q().select("courseTypeName","id","typeImg").eq("status", 1).eq("parentId",parentId).orderByAsc("sortOrder"));
    }

    /**
     * 查询所有的1级分类
     */
    public List<Map<String, Object>> selectAllOne(){
        return listMaps(q().select("courseTypeName","id","sortOrder","typeImg").isNull("parentId").orderByAsc("sortOrder"));
    }

    /**
     * 查询某级分类下的所有下级分类
     */
    public List<Map<String, Object>> selectTypeByParent(String coursetypeId){
        return listMaps(q().select("courseTypeName","id","sortOrder").eq("parentId", coursetypeId));
    }

    /**
     * 查询一级分类下的所有二级分类
     */
    public List<String> selectTypeByType(String coursetypeId){
        return listObjs(q().select("id").eq("parentId", coursetypeId),e->e.toString());
    }
}
